<?php

header("content-type: text/html; charset=utf-8");

/*
 * 什么叫魔法方法：被解释器在某些特殊情况下调用的实例方法。
 */
class WebDeveloper {
  public $info = array();

  // 当执行赋值时，而目标成员不存在会调用此方法。
  public function __set($item, $value) {
    $this->info[$item] = $value;
  }

  // 当执行取值时，而目标成员不存在会调用此方法。
  public function __get($item) {
    return $this->info[$item];
  }

  // 当执行isset方法时，而目标成员不存在会调用此方法。
  public function __isset($item) {
    return isset($this->info[$item]);
  }

  // 当执行unset方法时，而目标成员不存在会调用此方法。
  public function __unset($item) {
    unset($this->info[$item]);
  }

  // 当执行方法调用时，而目标方法不存在会调用此方法。
  public function __call($method_name, $args) {
    echo $method_name, var_dump($args), "<br/>";
  }
}

$developer = new WebDeveloper();
$developer->name = "段光伟";

echo "{$developer->name}<br/>";
echo (isset($developer->name) ? "TRUE" : "FALSE")."<br/>";
unset($developer->name);
echo (isset($developer->name) ? "TRUE" : "FALSE")."<br/>";

$developer->saySomething('hi!','how are you!');

?>